home *** CD-ROM | disk | FTP | other *** search
/ AMIGA-CD 2 / Amiga-CD - Volume 2.iso / gepackte_disketten / 1994 / 08_94_5.dms / 08_94_5.adf / term-4.0-Source.lha / termInfoWindow.c < prev    next >
C/C++ Source or Header  |  1994-07-07  |  8KB  |  401 lines

  1. /*
  2. **    termInfoWindow.c
  3. **
  4. **    Status information window support routines
  5. **
  6. **    Copyright © 1990-1994 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. */
  9.  
  10. #include "termGlobal.h"
  11.  
  12. enum    {    GAD_UPDATE=1,GAD_SESSION,GAD_BYTES_IN_OUT,GAD_CONNECT_STRING,GAD_BBS_INFO,
  13.         GAD_SCREEN_SIZE,GAD_PORT_NAME,GAD_BUFFER_SIZE,GAD_MEMORY,
  14.     };
  15.  
  16. STATIC struct Task        *InfoTask;
  17. STATIC struct LayoutHandle    *InfoHandle;
  18.  
  19.     /* LocalRefreshInfoWindow():
  20.      *
  21.      *    Refresh, i.e. redraw, the contents of the info window.
  22.      */
  23.  
  24. STATIC VOID
  25. LocalRefreshInfoWindow(VOID)
  26. {
  27.     if(InfoWindow)
  28.     {
  29.         UBYTE DummyBuffer[256];
  30.  
  31.         SPrintf(DummyBuffer,ConvNumber,BytesIn);
  32.  
  33.         LT_SetAttributes(InfoHandle,GAD_BYTES_IN_OUT,
  34.             LABX_Index,    0,
  35.             LABX_Text,    DummyBuffer,
  36.         TAG_DONE);
  37.  
  38.         SPrintf(DummyBuffer,ConvNumber,BytesOut);
  39.  
  40.         LT_SetAttributes(InfoHandle,GAD_BYTES_IN_OUT,
  41.             LABX_Index,    1,
  42.             LABX_Text,    DummyBuffer,
  43.         TAG_DONE);
  44.  
  45.         Forbid();
  46.  
  47.         if(XEmulatorBase && XEM_IO)
  48.         {
  49.             if(XEmulatorBase -> lib_Version >= 4)
  50.             {
  51.                 ULONG Result = XEmulatorInfo(XEM_IO,XEMI_CONSOLE_DIMENSIONS);
  52.  
  53.                 SPrintf(DummyBuffer,"%ld × %ld",XEMI_EXTRACT_COLUMNS(Result),XEMI_EXTRACT_LINES(Result));
  54.             }
  55.             else
  56.                 strcpy(DummyBuffer,"???");
  57.         }
  58.         else
  59.             SPrintf(DummyBuffer,"%ld × %ld",LastColumn + 1,LastLine + 1);
  60.  
  61.         Permit();
  62.  
  63.         LT_SetAttributes(InfoHandle,GAD_SCREEN_SIZE,
  64.             GTTX_Text,    DummyBuffer,
  65.         TAG_DONE);
  66.  
  67.         SPrintf(DummyBuffer,ConvNumber,BufferSpace);
  68.  
  69.         LT_SetAttributes(InfoHandle,GAD_BUFFER_SIZE,
  70.             GTTX_Text,    DummyBuffer,
  71.         TAG_DONE);
  72.  
  73.         SPrintf(DummyBuffer,ConvNumber,AvailMem(MEMF_ANY));
  74.  
  75.         LT_SetAttributes(InfoHandle,GAD_MEMORY,
  76.             GTTX_Text,    DummyBuffer,
  77.         TAG_DONE);
  78.  
  79.         LT_SetAttributes(InfoHandle,GAD_BBS_INFO,
  80.             LABX_Index,    0,
  81.             LABX_Text,    CurrentBBSName[0] ? CurrentBBSName : (STRPTR)"-",
  82.         TAG_DONE);
  83.  
  84.         LT_SetAttributes(InfoHandle,GAD_BBS_INFO,
  85.             LABX_Index,    1,
  86.             LABX_Text,    CurrentBBSNumber[0] ? CurrentBBSNumber : (STRPTR)"-",
  87.         TAG_DONE);
  88.  
  89.         LT_SetAttributes(InfoHandle,GAD_BBS_INFO,
  90.             LABX_Index,    2,
  91.             LABX_Text,    CurrentBBSComment[0] ? CurrentBBSComment : (STRPTR)"-",
  92.         TAG_DONE);
  93.  
  94.         LT_SetAttributes(InfoHandle,GAD_BBS_INFO,
  95.             LABX_Index,    3,
  96.             LABX_Text,    UserName[0] ? UserName : (STRPTR)"-",
  97.         TAG_DONE);
  98.     }
  99. }
  100.  
  101.     /* LocalCloseInfoWindow():
  102.      *
  103.      *    Close the info window.
  104.      */
  105.  
  106. STATIC VOID
  107. LocalCloseInfoWindow(VOID)
  108. {
  109.     Forbid();
  110.  
  111.     CheckItem(MEN_STATUS_WINDOW,FALSE);
  112.  
  113.     Permit();
  114.  
  115.     if(InfoHandle)
  116.     {
  117.         LT_DeleteHandle(InfoHandle);
  118.  
  119.         InfoHandle = NULL;
  120.     }
  121.  
  122.     InfoWindow = NULL;
  123. }
  124.  
  125.     /* LocalOpenInfoWindow():
  126.      *
  127.      *    Open the info window.
  128.      */
  129.  
  130. STATIC BOOLEAN
  131. LocalOpenInfoWindow(VOID)
  132. {
  133.     if(InfoHandle = LT_CreateHandleTags(Window -> WScreen,
  134.         LH_LocaleHook,    &LocaleHook,
  135.     TAG_DONE))
  136.     {
  137.         LT_New(InfoHandle,
  138.             LA_Type,    VERTICAL_KIND,
  139.         TAG_DONE);
  140.         {
  141.             LT_New(InfoHandle,
  142.                 LA_Type,    VERTICAL_KIND,
  143.             TAG_DONE);
  144.             {
  145.                 UBYTE DummyBuffer[256];
  146.  
  147.                 if(!FormatStamp(&SessionStart,NULL,NULL,DummyBuffer,FALSE))
  148.                     strcpy(DummyBuffer,"-");
  149.  
  150.                 LT_New(InfoHandle,
  151.                     LA_Type,        TEXT_KIND,
  152.                     LA_LabelID,        MSG_INFOWINDOW_SESSION_START_GAD,
  153.                     LA_ID,            GAD_SESSION,
  154.                     LA_Chars,        40,
  155.                     GTTX_Text,        DummyBuffer,
  156.                     GTTX_Border,        TRUE,
  157.                     GTTX_CopyText,        TRUE,
  158.                 TAG_DONE);
  159.  
  160.                 LT_New(InfoHandle,
  161.                     LA_Type,        XBAR_KIND,
  162.                 TAG_DONE);
  163.  
  164.                 LT_New(InfoHandle,
  165.                     LA_Type,        BOX_KIND,
  166.                     LA_ID,            GAD_BYTES_IN_OUT,
  167.                     LABX_FirstLabel,    MSG_INFOWINDOW_BYTES_RECEIVED_GAD,
  168.                     LABX_LastLabel,        MSG_INFOWINDOW_BYTES_SENT_GAD,
  169.                     LABX_ReserveSpace,    TRUE,
  170.                     LABX_DrawBox,        TRUE,
  171.                 TAG_DONE);
  172.  
  173.                 LT_New(InfoHandle,
  174.                     LA_Type,        XBAR_KIND,
  175.                 TAG_DONE);
  176.  
  177.                 LT_New(InfoHandle,
  178.                     LA_Type,        TEXT_KIND,
  179.                     LA_LabelID,        MSG_INFOWINDOW_CONNECTION_MESSAGE_GAD,
  180.                     LA_ID,            GAD_CONNECT_STRING,
  181.                     GTTX_Text,        BaudBuffer[0] ? BaudBuffer : (STRPTR)"-",
  182.                     GTTX_Border,        TRUE,
  183.                     GTTX_CopyText,        TRUE,
  184.                 TAG_DONE);
  185.  
  186.                 LT_New(InfoHandle,
  187.                     LA_Type,        BOX_KIND,
  188.                     LA_ID,            GAD_BBS_INFO,
  189.                     LABX_FirstLabel,    MSG_INFOWINDOW_BBS_NAME_GAD,
  190.                     LABX_LastLabel,        MSG_INFOWINDOW_BBS_USER_NAME_GAD,
  191.                     LABX_ReserveSpace,    TRUE,
  192.                     LABX_DrawBox,        TRUE,
  193.                 TAG_DONE);
  194.  
  195.                 LT_New(InfoHandle,
  196.                     LA_Type,        XBAR_KIND,
  197.                 TAG_DONE);
  198.  
  199.                 LT_New(InfoHandle,
  200.                     LA_Type,        TEXT_KIND,
  201.                     LA_LabelID,        MSG_INFOWINDOW_SCREEN_SIZE_GAD,
  202.                     LA_ID,            GAD_SCREEN_SIZE,
  203.                     GTTX_Border,        TRUE,
  204.                     GTTX_CopyText,        TRUE,
  205.                 TAG_DONE);
  206.  
  207.                 LT_New(InfoHandle,
  208.                     LA_Type,        TEXT_KIND,
  209.                     LA_LabelID,        MSG_INFOWINDOW_AREXX_PORT_NAME_GAD,
  210.                     LA_ID,            GAD_PORT_NAME,
  211.                     GTTX_Text,        RexxPortName,
  212.                     GTTX_Border,        TRUE,
  213.                     GTTX_CopyText,        TRUE,
  214.                 TAG_DONE);
  215.  
  216.                 LT_New(InfoHandle,
  217.                     LA_Type,        TEXT_KIND,
  218.                     LA_LabelID,        MSG_INFOWINDOW_BUFFER_SIZE_GAD,
  219.                     LA_ID,            GAD_BUFFER_SIZE,
  220.                     GTTX_Border,        TRUE,
  221.                     GTTX_CopyText,        TRUE,
  222.                 TAG_DONE);
  223.  
  224.                 LT_New(InfoHandle,
  225.                     LA_Type,        TEXT_KIND,
  226.                     LA_LabelID,        MSG_INFOWINDOW_FREE_MEMORY_GAD,
  227.                     LA_ID,            GAD_MEMORY,
  228.                     GTTX_Border,        TRUE,
  229.                     GTTX_CopyText,        TRUE,
  230.                 TAG_DONE);
  231.  
  232.                 LT_EndGroup(InfoHandle);
  233.             }
  234.  
  235.             LT_New(InfoHandle,
  236.                 LA_Type,VERTICAL_KIND,
  237.             TAG_DONE);
  238.             {
  239.                 LT_New(InfoHandle,
  240.                     LA_Type,    XBAR_KIND,
  241.                     LAXB_FullSize,    TRUE,
  242.                 TAG_DONE);
  243.  
  244.                 LT_EndGroup(InfoHandle);
  245.             }
  246.  
  247.             LT_New(InfoHandle,
  248.                 LA_Type,    HORIZONTAL_KIND,
  249.             TAG_DONE);
  250.             {
  251.                 LT_New(InfoHandle,
  252.                     LA_Type,    BUTTON_KIND,
  253.                     LA_LabelID,    MSG_V36_1414,
  254.                     LA_ID,        GAD_UPDATE,
  255.                     LA_ReturnKey,    TRUE,
  256.                     LABT_ExtraFat,    TRUE,
  257.                 TAG_DONE);
  258.  
  259.                 LT_EndGroup(InfoHandle);
  260.             }
  261.  
  262.             LT_EndGroup(InfoHandle);
  263.         }
  264.  
  265.         if(InfoWindow = LT_Layout(InfoHandle,LocaleString(MSG_INFOWINDOW_STATUS_INFORMATION_TXT),NULL,0,0,IDCMP_CLOSEWINDOW,ALIGNF_RIGHT,
  266.             LAWN_HelpHook,        &GuideHook,
  267.             WA_DepthGadget,        TRUE,
  268.             WA_CloseGadget,        TRUE,
  269.             WA_DragBar,        TRUE,
  270.             WA_RMBTrap,        TRUE,
  271.         TAG_DONE))
  272.         {
  273.             LocalRefreshInfoWindow();
  274.  
  275.             return(TRUE);
  276.         }
  277.         else
  278.         {
  279.             LT_DeleteHandle(InfoHandle);
  280.  
  281.             InfoHandle = NULL;
  282.         }
  283.     }
  284.  
  285.     return(FALSE);
  286. }
  287.  
  288. STATIC VOID __saveds
  289. StatusTaskEntry(VOID)
  290. {
  291.     struct Process *Parent = ThisProcess;
  292.  
  293.     if(LocalOpenInfoWindow())
  294.     {
  295.         struct IntuiMessage    *Message;
  296.         ULONG             MsgClass;
  297.         UWORD             MsgCode,
  298.                      MsgQualifier;
  299.         struct Gadget        *MsgGadget;
  300.         BOOLEAN             Done = FALSE;
  301.  
  302.         InfoTask = FindTask(NULL);
  303.  
  304.         Signal(Parent,SIG_HANDSHAKE);
  305.  
  306.         do
  307.         {
  308.             if(Wait(PORTMASK(InfoWindow -> UserPort) | SIG_KILL) & SIG_KILL)
  309.                 break;
  310.             else
  311.             {
  312.                 while(Message = GT_GetIMsg(InfoWindow -> UserPort))
  313.                 {
  314.                     MsgClass    = Message -> Class;
  315.                     MsgCode        = Message -> Code;
  316.                     MsgQualifier    = Message -> Qualifier;
  317.                     MsgGadget    = (struct Gadget *)Message -> IAddress;
  318.  
  319.                     GT_ReplyIMsg(Message);
  320.  
  321.                     LT_HandleInput(InfoHandle,MsgQualifier,&MsgClass,&MsgCode,&MsgGadget);
  322.  
  323.                     switch(MsgClass)
  324.                     {
  325.                         case IDCMP_CLOSEWINDOW:
  326.  
  327.                             if(!Done)
  328.                             {
  329.                                 Forbid();
  330.  
  331.                                 if(!(SetSignal(0,SIG_KILL) & SIG_KILL))
  332.                                     Parent = NULL;
  333.  
  334.                                 Done = TRUE;
  335.                             }
  336.  
  337.                             break;
  338.  
  339.                         case IDCMP_GADGETUP:
  340.  
  341.                             if(MsgGadget -> GadgetID == GAD_UPDATE)
  342.                                 LocalRefreshInfoWindow();
  343.  
  344.                             break;
  345.                     }
  346.                 }
  347.             }
  348.         }
  349.         while(!Done);
  350.  
  351.         LocalCloseInfoWindow();
  352.     }
  353.  
  354.     Forbid();
  355.  
  356.     InfoTask = NULL;
  357.  
  358.     if(Parent)
  359.         Signal(Parent,SIG_HANDSHAKE);
  360. }
  361.  
  362. VOID
  363. CloseInfoWindow()
  364. {
  365.     Forbid();
  366.  
  367.     if(InfoTask)
  368.     {
  369.         Signal(InfoTask,SIG_KILL);
  370.  
  371.         ClrSignal(SIG_HANDSHAKE);
  372.  
  373.         Wait(SIG_HANDSHAKE);
  374.     }
  375.  
  376.     Permit();
  377. }
  378.  
  379. VOID
  380. OpenInfoWindow()
  381. {
  382.     Forbid();
  383.  
  384.     if(!InfoTask)
  385.     {
  386.         if(CreateTask("term Status Window Task",SysBase -> ThisTask -> tc_Node . ln_Pri,StatusTaskEntry,4000))
  387.         {
  388.             ClrSignal(SIG_HANDSHAKE);
  389.  
  390.             Wait(SIG_HANDSHAKE);
  391.         }
  392.     }
  393.  
  394.     if(InfoTask)
  395.         CheckItem(MEN_STATUS_WINDOW,TRUE);
  396.     else
  397.         CheckItem(MEN_STATUS_WINDOW,FALSE);
  398.  
  399.     Permit();
  400. }
  401.